package com.example.musicplayer;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.content.ContentResolver;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.provider.MediaStore;
import android.view.View;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends AppCompatActivity {

    RecyclerView musicRv;
    List<MusicBean>mDatas;     //    数据源
    private MusicAdapter adapter;

    MediaPlayer mediaPlayer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        musicRv = findViewById(R.id.local_music_rv);  //显示列表
        mediaPlayer = new MediaPlayer();    //音乐播放类
        mDatas = new ArrayList<>();         //初始化定义
//     创建适配器对象，（作为成员变量来写）
        adapter = new MusicAdapter(this, mDatas);
        musicRv.setAdapter(adapter);//设置适配器
//        设置布局管理器，规定最后展示形式（context ，列表布局垂直滑动，不反转）
        LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        musicRv.setLayoutManager(layoutManager);
//        加载本地数据源
        loadLocalMusicData();
//        设置每一项的点击事件
        setEventListener();
    }

    private void setEventListener() {
        /* 设置每一项的点击事件*/
        //调用接口对象，传入接口对象
        adapter.setOnItemClickListener(new MusicAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(View view, int position) {
                Intent intent = new Intent(MainActivity.this, PlayActivity.class);
                //传递参数   position：当前位置
                intent.putExtra("mDatas", (Serializable) mDatas);
                intent.putExtra("Position",position);
                startActivity(intent);
            }
        });
    }



    private void loadLocalMusicData() {
        /* 加载本地存储当中的音乐mp3文件到集合当中*/
//        获取ContentResolver对象
        ContentResolver resolver = getContentResolver();
//        获取本地音乐存储的Uri地址(外部存储)
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//        开始查询地址，传入uri，其余查询条件为空，得到的内容存放在Cursor中
        Cursor cursor = resolver.query(uri, null, null, null, null);
//        遍历Cursor
        int id = 0;     //由于固定的id都比较大，其中还包含铃声，而我们这里不需要，所以就自定义id
        while (cursor.moveToNext()) {//用cursor.moveToNext()看是否能移动到下一个，若可以继续循环
            String song = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));        //这些字段都是固定的，选择音乐的TITLE
            String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));     //艺术家
            String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));       //专辑
            id++;       //有了一首歌就id++
            String sid = String.valueOf(id);    //转换为String类型
            String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));         //路径
            long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));     //时长
            SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");   //由于时长说long类型，需要定义时间格式，转换为String类型
            String time = sdf.format(new Date(duration));
//          获取专辑图片主要是通过album_id进行查询
            String album_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
            String albumArt = getAlbumArt(album_id);
//            将一行当中的数据封装到对象当中     序号  歌名   歌手    专辑    时长   路径  专辑图片
            MusicBean bean = new MusicBean(sid, song, singer, album, time, path,albumArt);
            mDatas.add(bean);   //封装到集合中
        }
//        数据源变化，提示适配器更新
        adapter.notifyDataSetChanged();
    }


    private String getAlbumArt(String album_id) {
        String mUriAlbums = "content://media/external/audio/albums";    //音乐文件对应专辑(Albums)URI,实际值
        String[] projection = new String[]{"album_art"};    //指定查询数据库表中的album_art列
        //parse：将路径转换为一个Uri对象（要操作的数据）
        Cursor cur = this.getContentResolver().query(
                Uri.parse(mUriAlbums + "/" + album_id),
                projection, null, null, null);
        String album_art = null;
        if (cur.getCount() > 0 && cur.getColumnCount() > 0) {   //返回Cursor 中的行数和返回所有列的总数都大于0时
            cur.moveToNext();//移动光标到下一行
            album_art = cur.getString(0);//获取第一列的值（即专辑图片）
        }
        cur.close();
        cur = null;
        return album_art;
    }




}
